G.729 and G.723.1 codecs for Asterisk open source PBX
Asterisk 1.4 to 21 are supported.
To compile the codecs it is recommended to install Intel IPP
libraries for better performance. Alternatively, download and install Bcg729 -
a slightly slower implementation written in portable C99. Only G.729 will be available in that case.
The codecs are tested against Bcg729 1.0.2, IPP 5.3 - 8.2. Users of IPP 9.0 and IPP 2017 must also install
IPP Legacy libraries.
Later IPP versions may not work. AMD processors works with IPP too.
- choose codec binary appropriate for your Asterisk version and CPU type, use x86_64 for 64-bit mode
- delete old codec_g72[39]*.so files (if any) from /usr/lib/asterisk/modules directory
- copy new codec_g72[39]*.so files into /usr/lib/asterisk/modules directory
- restart Asterisk
- check the codec is loaded with 'core show translation recalc 10' on Asterisk console
- G.723.1 send rate is configured in Asterisk codecs.conf file:
[g723]
; 6.3Kbps stream, default
sendrate=63
; 5.3Kbps
;sendrate=53
This option is for outgoing voice stream only. It does not affect incoming stream that should be decoded automatically whatever the bitrate is.
- in sip.conf or/and iax.conf configure the codec(s) either globally or under respective peer, for example:
disallow=all
allow=g729
- use "g723 debug" and "g729 debug" commands to print statistics about received frame sizes, can aid in debugging audio problems; you need to bump Asterisk debug level to 1 to see the numbers
- for detailed information about Asterisk configuration visit Asterisk Wiki
- for information about astconv utility read the README
- in case of problems read Notes and Troubleshooting
|
Linux binaries
Asterisk 1.8
Asterisk 11
Asterisk 12
Asterisk 13
Asterisk 14
Asterisk 15
Asterisk 16
Asterisk 17
Asterisk 18
Asterisk 19
Asterisk 20
Asterisk 21
|
- After download check MD5SUM.
- Use x86_64 build if running 64-bit mode. Binary without x86_64 in its name is 32-bit. Use pentium4/core2/opteron binaries even your processor is 64-bit capable but you are running 32-bit.
- Use Pentium 4 build for Pentium D. Use Pentium 3 for VIA C3 and Pentium 4 for VIA C7.
- XEON is a server brand CPU of Pentium3/Pentium4/Core families. Celeron is Pentium3/Pentium4/Core with smaller cache.
Basically, there are 5 software cores: MMX, SSE, SSE2, SSE3, SSE4. Pick closest match from Intel CPU line and try it.
- GCC4, ICC - all binaries are compatible with Asterisk built by any other compiler, use what is faster or better for you.
- sse3 builds are for Prescott iteration of Pentium 4 chips with SSE3 support, check for PNI flag in /proc/cpuinfo.
- ICC cores are not always the fastest, check with '(core) show translation recalc 10' on Asterisk console, ensure the box is idle or else timings will be inaccurate.
- Noise or metalic sound with codec_g723
Configure /etc/asterisk/codecs.conf [g723] sendrate=63 or 53 as described at the top of this page.
- Distorted sound
Disable VAD and CNG in phone and/or your VOIP provider.
- show translation - codec is not loaded
Bump asterisk verbosity level with -vv and watch for messages right after 'loading module codec_g729...'
- loader.c... /usr/lib/asterisk/modules/codec_g72...: cannot restore segment prot after reloc: Permission denied
Execute:
$ chcon -t textrel_shlib_t /usr/lib/asterisk/modules/codec_g72[39]*.so
This happens when SELinux is enabled and Asterisk process cannot load the codec because of ELF TEXTREL
in shared library. This is how IPP works and that is fine.
- loader.c... /usr/lib/asterisk/modules/codec_g72...: cannot enable executable stack as shared object requires: Permission denied
Execute:
$ execstack -c /usr/lib/asterisk/modules/codec_g72[39]*.so
- Error loading module codec_g72...: cannot open shared object file: No such file or directory
Check
$ ldd codec_g729.so
$ strace -o trace.log -efile -f asterisk
send ldd output and trace.log file to Asterisk G.729 Google group.
- Error loading module codec_g72...: wrong ELF class: ELFCLASS32
Use x86_64 binaries because you're running 64-bit OS.
- $ ldd codec_g729.so: not a dynamic executable
You are running 32-bit, see Notes - note #2
- Asterisk crashing at startup
If Pentium4 codec is not working, try -no-sse builds, try Pentium3. Try ICC builds. Doesn't work - try Pentium and Debug builds.
- Asterisk still crashing at startup
Compile asterisk with CFLAGS=-g
Run asterisk in gdb (with original and -debug version of the codec):
$ gdb /usr/sbin/asterisk
(gdb) r -cvvv
when it crashes do:
(gdb) set disassembly-flavor intel
(32-bit gdb 6.x) disassemble $eip $eip+20
(32-bit gdb 7.x) disassemble $eip, $eip+20
(64-bit gdb 6.x) disassemble $rip $rip+20
(64-bit gdb 7.x) disassemble $rip, $rip+20
(gdb) info registers
(gdb) info threads
(gdb) bt
(gdb) l
(gdb) q
Send an output to Asterisk G.729 Google group together with the result of 'cat /proc/cpuinfo'.
- Why these Illegal instruction errors?
For in-depth technical information read
http://gcc.gnu.org/PR32893 and
http://bugs.gentoo.org/show_bug.cgi?id=151394.
The primary source of help is Asterisk G.729 Google group.
Post your questions there,
but first read Notes and Troubleshooting sections
above. When reporting a problem it is up to you to provide as much useful information as possible.
"Doesn't work" - is not a good description.